package com.bjbn.service;

import com.bjbn.entity.BridgeInfo;
import com.bjbn.entity.BridgeInfoHistory;

import java.util.List;

/**
 * Elasticsearch服务接口
 */
public interface ElasticsearchService {
    
    /**
     * 创建索引
     * 
     * @param indexName 索引名称
     * @return 是否创建成功
     */
    boolean createIndex(String indexName);
    
    /**
     * 删除索引
     * 
     * @param indexName 索引名称
     * @return 是否删除成功
     */
    boolean deleteIndex(String indexName);
    
    /**
     * 保存廊桥状态信息到ES
     * 
     * @param data 廊桥状态信息数据
     * @return 是否保存成功
     */
    boolean saveBridgeInfo(BridgeInfo data);
    
    /**
     * 批量保存廊桥状态信息到ES
     * 
     * @param dataList 廊桥状态信息数据列表
     * @return 是否保存成功
     */
    boolean saveBridgeInfoBatch(List<BridgeInfo> dataList);
    
    /**
     * 根据ID查询廊桥状态信息
     * 
     * @param id 廊桥状态ID
     * @return 廊桥状态信息
     */
    BridgeInfo findById(String id);
    
    /**
     * 根据设备名称查询
     * 
     * @param deviceName 设备名称
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByDeviceNameContaining(String deviceName);
    
    /**
     * 根据厂家查询
     * 
     * @param brand 厂家
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByBrand(String brand);
    
    /**
     * 根据区域查询
     * 
     * @param area 区域
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByArea(String area);
    
    /**
     * 根据设备组查询
     * 
     * @param deviceGroup 设备组
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByDeviceGroup(String deviceGroup);
    
    /**
     * 根据设备状态查询
     * 
     * @param sta 设备状态
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findBySta(String sta);
    
    /**
     * 根据IP地址查询
     * 
     * @param ip IP地址
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByIp(String ip);
    
    /**
     * 根据责任部门查询
     * 
     * @param dept 责任部门
     * @return 廊桥状态信息列表
     */
    List<BridgeInfo> findByDept(String dept);
    
    /**
     * 统计索引中的文档数量
     * 
     * @return 文档数量
     */
    long count();
    
    /**
     * 删除所有数据（通过删除并重建索引）
     * 
     * @return 是否删除成功
     */
    boolean deleteAll();
    
    // ==================== 廊桥信息历史操作 ====================
    
    /**
     * 保存廊桥信息历史
     * 
     * @param data 廊桥信息历史数据
     * @return 是否保存成功
     */
    boolean saveBridgeInfoHistory(BridgeInfoHistory data);
    
    /**
     * 批量保存廊桥信息历史
     * 
     * @param dataList 廊桥信息历史数据列表
     * @return 是否保存成功
     */
    boolean saveBridgeInfoHistoryBatch(List<BridgeInfoHistory> dataList);
    
    /**
     * 根据ID查询廊桥信息历史
     * 
     * @param id 廊桥信息历史ID
     * @return 廊桥信息历史
     */
    BridgeInfoHistory findHistoryById(String id);
    
    /**
     * 根据设备名称查询廊桥信息历史
     * 
     * @param deviceName 设备名称
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByDeviceNameContaining(String deviceName);
    
    /**
     * 根据厂家查询廊桥信息历史
     * 
     * @param brand 厂家
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByBrand(String brand);
    
    /**
     * 根据区域查询廊桥信息历史
     * 
     * @param area 区域
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByArea(String area);
    
    /**
     * 根据设备组查询廊桥信息历史
     * 
     * @param deviceGroup 设备组
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByDeviceGroup(String deviceGroup);
    
    /**
     * 根据设备状态查询廊桥信息历史
     * 
     * @param sta 设备状态
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryBySta(String sta);
    
    /**
     * 根据IP地址查询廊桥信息历史
     * 
     * @param ip IP地址
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByIp(String ip);
    
    /**
     * 根据责任部门查询廊桥信息历史
     * 
     * @param dept 责任部门
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByDept(String dept);
    
    /**
     * 根据时间范围查询廊桥信息历史
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 廊桥信息历史列表
     */
    List<BridgeInfoHistory> findHistoryByTimeRange(java.time.LocalDateTime startTime, java.time.LocalDateTime endTime);
    
    /**
     * 统计廊桥信息历史总数
     * 
     * @return 历史数据数量
     */
    long countHistory();
    
    /**
     * 清空廊桥信息历史索引
     * 
     * @return 是否清空成功
     */
    boolean deleteAllHistory();
} 